home *** CD-ROM | disk | FTP | other *** search
/ Run Magazine ReRun 1985 Fall / rerun-1985-fall.d64 / disk doctor (.txt) < prev    next >
Commodore BASIC  |  2022-09-20  |  10KB  |  407 lines

  1. 1000 rem-----------------------
  2. 1010 rem-                     -
  3. 1020 rem-     disk doctor     -
  4. 1030 rem-                     -
  5. 1040 rem-   by john tanzini   -
  6. 1050 rem-                     -
  7. 1060 rem-----------------------
  8. 1070 print "[147]select a number.": print
  9. 1080 print "1. list directory": print
  10. 1090 print "2. restore a file": print
  11. 1100 print "3. pack directory": print
  12. 1110 print "4. list used blocks": print
  13. 1120 print "5. view or modify": print "block": print
  14. 1130 print "6. format disk": print
  15. 1140 print "7. send disk command": print
  16. 1150 print: print: print "press e to end."
  17. 1160 get kk$: if kk$="" then 1160
  18. 1170 if kk$="e" then print "[147]";: end
  19. 1180 kk = val(kk$)
  20. 1190 on kk gosub 1380, 1720, 2610, 3350, 3810, 4770, 4950
  21. 1200 goto 1070
  22. 1210 rem-----------------------------
  23. 1220 rem-                           -
  24. 1230 rem-   disk error subroutine   -
  25. 1240 rem-                           -
  26. 1250 rem-----------------------------
  27. 1260 print: print: print "**** disk error ****"
  28. 1270 print: print e1$;" ";e2$;" ";e3$;" ";e4$
  29. 1280 print: print "press any key to"
  30. 1290 print "return to menu"
  31. 1300 get k$: if k$="" then 1300
  32. 1310 return
  33. 1320 rem-----------------------------
  34. 1330 rem-                           -
  35. 1340 rem-         part 1            -
  36. 1350 rem-   list entire directory   -
  37. 1360 rem-                           -
  38. 1370 rem-----------------------------
  39. 1380 open 15,8,15
  40. 1390 open 2,8,2,"#2"
  41. 1400 t = 18: s = 1: print "[147]"
  42. 1410 print#15,"u1:";2;8;t;s
  43. 1420 input#15, e1$, e2$, e3$, e4$
  44. 1430 if e1$<>"00" then gosub 1260: goto 1640
  45. 1440 print#15,"b-p:";2;0
  46. 1450 get#2,t$: get#2, s$
  47. 1460 for i = 2 to 226 step 32
  48. 1470 print#15,"b-p:";2;i
  49. 1480 get#2, a$: if a$="" then print "";
  50. 1490 get#2, a$: get#2, a$
  51. 1500 print "";
  52. 1510 for j = 1 to 16
  53. 1520 get#2, a$: print a$;
  54. 1530 next
  55. 1540 if a$<>"" then print: print
  56. 1550 get k$: if k$="" then 1590
  57. 1560 if k$="e" then 1640
  58. 1570 get k$: if k$="" then goto 1570
  59. 1580 if k$="e" then 1640
  60. 1590 next
  61. 1600 t = asc(t$+chr$(0)): s = asc(s$+chr$(0))
  62. 1610 if t>0 and t<36 then goto 1410
  63. 1620 print: print "press any key to": print "return to menu"
  64. 1630 get k$: if k$="" then 1630
  65. 1640 close 2: close 15
  66. 1650 return
  67. 1660 rem----------------------------
  68. 1670 rem-                          -
  69. 1680 rem-         part 2
  70. 1690 rem-  restore scratched file  -
  71. 1700 rem-                          -
  72. 1710 rem----------------------------
  73. 1720 print "[147]enter name of file"
  74. 1730 input n1$
  75. 1740 print: print: print "is the file a"
  76. 1750 print: print "1. program"
  77. 1760 print: print "2. sequential file"
  78. 1770 get k$: if k$="1" then ft = 130: goto 1800
  79. 1780 if k$="2" then ft = 129: goto 1800
  80. 1790 goto 1770
  81. 1800 print: print: print "restoring"; n1$
  82. 1810 open 15,8,15
  83. 1820 open 2,8,2,"#0"
  84. 1830 open 3,8,3,"#1"
  85. 1840 gosub 2350: rem find file in directory
  86. 1850 if pt=0 then 2040; rem cannot restore
  87. 1860 print#15,"b-a:";0;pt;ps
  88. 1870 input#15,e1$,e2$,e3$,e4$
  89. 1880 if e1$<>"00" and e1$<>"65" then gosub 1260: return
  90. 1890 if e1$="65" then 2040: rem cannot restore
  91. 1900 print#15,"u1:";3;0;pt;ps
  92. 1910 lt = pt: ls = ps
  93. 1920 print#15,"b-p:";3;0
  94. 1930 get#3,pt$: get#3,ps$
  95. 1940 pt = asc(pt$+chr$(0)): ps = asc(ps$+chr$(0))
  96. 1950 if pt=0 then goto 2100: rem successful restore
  97. 1960 print#15,"b-a:";0;pt;ps
  98. 1970 input#15,e1$,e2$,e3$,e4$
  99. 1980 if e1$<>"65" and e1$<>"00" then gosub 1260: return
  100. 1990 if e1$="65" then 2180: rem partial restore
  101. 2000 goto 1900: rem read another block
  102. 2010 rem
  103. 2020 rem ----- cannot restore -----
  104. 2030 rem
  105. 2040 print: print: print "*** cannot  ***"
  106. 2050 print "*** restore ***"
  107. 2060 goto 2280
  108. 2070 rem
  109. 2080 rem ----- successful restore -----
  110. 2090 rem
  111. 2100 print#15,"b-p:";2;dp
  112. 2110 print#2,chr$(ft);
  113. 2120 print#15,"u2:";2;0;t;s
  114. 2130 print: print: print "*** successful ***": print "***  restore   ***"
  115. 2140 goto 2280
  116. 2150 rem
  117. 2160 rem ----- partial restore -----
  118. 2170 rem
  119. 2180 print#15,"b-p:";2;dp
  120. 2190 print#2,chr$(ft);
  121. 2200 print#15,"u2:";2;0;t;s
  122. 2210 print#15,"b-p:";3;0
  123. 2220 print#3,chr$(0);
  124. 2230 print#15,"b-p:";3;248
  125. 2240 for z = 1 to 8: print#3,chr$(0);: next
  126. 2250 print#15,"u2:";3;0;lt;ls
  127. 2260 print: print: print "*** partial ***"
  128. 2270 print "*** restore ***"
  129. 2280 print: print "press any key to": print "return to menu"
  130. 2290 get k$: if k$="" then goto 2290
  131. 2300 close 2: close 3: close 15
  132. 2310 return
  133. 2320 rem
  134. 2330 rem ---- find track and sector of file ----
  135. 2340 rem
  136. 2350 t = 18: s = 1
  137. 2360 print#15,"u1:";2;8;t;s
  138. 2370 input#15, e1$, e2$, e3$, e4$
  139. 2380 if e1$<>"00" then gosub 1260: pt = 0: goto 2540
  140. 2390 print#15,"b-p:";2;0
  141. 2400 get#2,t$: get#2, s$
  142. 2410 for i = 2 to 226 step 32
  143. 2420 print#15,"b-p:";2;i
  144. 2430 get#2, a$: if a$<>"" then 2500
  145. 2440 get#2, pt$: get#2, ps$
  146. 2450 n2$ = ""
  147. 2460 for j = 1 to 16
  148. 2470 get#2, a$: if a$<>chr$(160) then n2$=n2$+a$
  149. 2480 next
  150. 2490 if n1$=n2$ then pt = asc(pt$+chr$(0)): ps = asc(ps$+chr$(0)): dp = i: return
  151. 2500 next
  152. 2510 t = asc(t$+chr$(0)): s = asc(s$+chr$(0))
  153. 2520 if t>0 and t<36 then goto 2360
  154. 2530 pt = 0
  155. 2540 return
  156. 2550 rem----------------------
  157. 2560 rem-                    -
  158. 2570 rem-       part 3       -
  159. 2580 rem-   pack directory   -
  160. 2590 rem-                    -
  161. 2600 rem----------------------
  162. 2610 print "[147]is correct disk in": print "drive? (y/n)
  163. 2620 [161] k$: [139] k$[178]"" [167] 2620
  164. 2630 [139] k$[179][177]"y" [167] [142]
  165. 2640 [153]: [153]: [153]
  166. 2650 [153] "*************"
  167. 2660 [153] "*  packing  *
  168. 2670 print "*************"
  169. 2680 open 15,8,15
  170. 2690 open 2,8,2,"#0"
  171. 2700 open 3,8,3,"#1"
  172. 2710 rt = 18: rs = 1
  173. 2720 wt = 18: ws = 1
  174. 2730 lt = 0
  175. 2740 df = 0
  176. 2750 ef = 0
  177. 2760 gosub 3060: rem next-write-block
  178. 2770 if ef=1 then 3010
  179. 2780 gosub 3220: rem next-read-block
  180. 2790 if ef=1 then 3010
  181. 2800 for ri = 2 to 226  step 32
  182. 2810 print#15, "b-p:";3;ri
  183. 2820 get#3, ft$
  184. 2830 if ft$="" then 2920
  185. 2840 if wi>255 then gosub 3060: rem next-write-block
  186. 2850 if ef=1 then 3010
  187. 2860 print#15, "b-p:";2;wi
  188. 2870 print#2, ft$;
  189. 2880 for i = 1 to 29
  190. 2890 get#3, a$: print#2, left$(a$+chr$(0),1);
  191. 2900 next i
  192. 2910 wi = wi + 32
  193. 2920 next ri
  194. 2930 if rt<>0 then 2780
  195. 2940 if wi<255 then goto 2970
  196. 2950 gosub 3060: rem next-write-block
  197. 2960 if df = 1 then 3010
  198. 2970 print#15, "b-p:";2;wi
  199. 2980 print#2,chr$(0);
  200. 2990 wi = wi + 32
  201. 3000 goto 2940
  202. 3010 close 2: close 3: close 15
  203. 3020 return
  204. 3030 rem
  205. 3040 rem ---- next-write-block ----
  206. 3050 rem
  207. 3060 if lt<>0 then print#15, "u2:";2;0;lt;ls
  208. 3070 input#15, e1$, e2$, e3$, e4$
  209. 3080 if e1$<>"00" then ef=1: gosub 1260: return
  210. 3090 lt = wt: ls = ws
  211. 3100 if wt=0 then df = 1: return
  212. 3110 print#15, "u1:";2;0;wt;ws
  213. 3120 input#15, e1$, e2$, e3$, e4$
  214. 3130 if e1$<>"00" then ef=1: gosub 1260: return
  215. 3140 print#15, "b-p:";2;0
  216. 3150 get#2, wt$: get#2, ws$
  217. 3160 wt = asc(wt$+chr$(0)): ws = asc(ws$+chr$(0))
  218. 3170 wi = 2
  219. 3180 return
  220. 3190 rem
  221. 3200 rem ---- next-read-block ----
  222. 3210 rem
  223. 3220 print#15,"u1:";3;0;rt;rs
  224. 3230 input#15, e1$, e2$, e3$, e4$
  225. 3240 if e1$<>"00" then ef=1: gosub 1260: return
  226. 3250 print#15, "b=p:";3;0
  227. 3260 get#3, rt$: get#3, rs$
  228. 3270 rt = asc(rt$+chr$(0)): rs = asc(rs$+chr$(0))
  229. 3280 return
  230. 3290 rem---------------------------
  231. 3300 rem-                         -
  232. 3310 rem-          part 4         -
  233. 3320 rem-  list allocated blocks  -
  234. 3330 rem-                         -
  235. 3340 rem---------------------------
  236. 3350 if lf=0 then dim bm%(35,4): lf = 1
  237. 3360 print "[147]"; tab(4); "track"; tab(10); "sector": print
  238. 3370 open 15,8,15
  239. 3380 open 2,8,2,"#0"
  240. 3390 print#15, "u1:";2;0;18;0
  241. 3400 input#15, e1$, e2$, e3$, e4$
  242. 3410 if e1$<>"00" then gosub 1260: goto 3720
  243. 3420 print#15, "b-p:";2;4
  244. 3430 for t = 1 to 35
  245. 3440 for j = 0 to 3
  246. 3450 get#2, a$
  247. 3460 bm%(t,j) = asc(a$+chr$(0))
  248. 3470 next j, t
  249. 3480 restore
  250. 3490 nb = 0
  251. 3500 for n = 1 to 4
  252. 3510 read t1, t2, ns
  253. 3520 for t = t1 to t2
  254. 3530 if t<>18 then nb = nb + bm%(t,0)
  255. 3540 if bm%(t,0)=ns then 3680
  256. 3550 s = 0
  257. 3560 for i = 1 to 3
  258. 3570 b2 = bm%(t,i)
  259. 3580 for j = 1 to 8
  260. 3590 b1 = b2/2: b2 = int(b1)
  261. 3600 if b1=b2 then print tab(4); t; tab(11); s
  262. 3610 get k$: if k$="" then 3650
  263. 3620 if k$="e" then 3720
  264. 3630 get k$: if k$="" then 3630
  265. 3640 if k$="e" then 3720
  266. 3650 s = s + 1
  267. 3660 if s=ns then 3680
  268. 3670 next j, i
  269. 3680 next t, n
  270. 3690 print: print nb; "blocks free.": print
  271. 3700 print: print "press any key to": print "return to menu"
  272. 3710 get k$: if k$="" th